#ifndef ADEPT_H
#define ADEPT_H

#include "namegiver.h"
#include "discipline.h"
#include "specialization.h"
#include "talent.h"
#include "spell.h"

class Adept : public NameGiver
{
public:
  Adept();

  R(Discipline,discipline)
  R(int,circle)

  R(P(QSet<Specialization>),specializations)
  R(P(QList<Spell>),spells)

  QList<Talent> talents() const { return _talents.keys(); }

  void setTalentRank(const Talent& t, int rank);
  int talentRank(const Talent& t) const;

  void set_discipline(const Discipline& d);

  void addSpecialization(const Specialization& s);
  bool hasSpecialization(const Specialization& s) const;

  void raiseCircle();

  virtual int maximumKarma() const;

  virtual int characteristicBonus(ed::Characteristic c) const;

  QStringList karmaUsages() const;

private:
  QMap<Talent,int> _talents;
};

#endif // ADEPT_H
